package com.bw.controller;

import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;

import com.bw.entity.User;
import com.bw.mapper.UserMapper;

import org.spring.kun.common.Md5Utils;
import org.spring.kun.common.TokenUtils;
import org.spring.kun.common.ZzyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletResponse;
import java.util.concurrent.TimeUnit;

@Controller
public class LoginController {

    @Autowired
    UserMapper userMapper;


    @Autowired // 从容器中查找一个对象 给属性赋值
    RedisTemplate redisTemplate;

    @RequestMapping("/loginPage.do")
    public String loginPage() {
        return "login";
    }


    @RequestMapping("/login.do")
    public String login(User loginUser, Model model, HttpServletResponse response) {
        System.out.println("用户输入的用户名和密码" + JSON.toJSONString(loginUser));

        // 非空验证
        // 用户名不存在  见名之意
        User userDB = userMapper.selectByName(loginUser.getName());
        if (userDB == null) {
            model.addAttribute("error", "用户名不存在");
            return "login";
        }
        // 密码错误
        String loginUserPassword = loginUser.getPassword(); // 用户输入的密码
        String password = userDB.getPassword();// 数据库的密码 乱码
        String salt = userDB.getSalt();// 数据库里的盐

        // 加密用户输入的密码 和数据库里的盐
        String md5String = Md5Utils.getMD5String(loginUserPassword + salt);

        if (!md5String.equals(password)) {
            model.addAttribute("error", "密码错误");
            return "login";
        }


       /*
        // 加密用户 得到token
       String token = JwtUtils.createToken(userDB);

        // 创建一个cookie  把token放入cookie
        Cookie cookie = new Cookie("token", token);
        //cookie的有效时间是由浏览器来控制的，
        // Maxage只是一个建议性的参数，
        // 浏览器可以按照这个参数来设置cookie的有效时间，也可以忽略这个参数，设置自己的有效时间。
        cookie.setMaxAge(30 * 60); //cookie 30分钟有效期   到期了浏览器会自动删除
        // 把cookie返回给浏览器 浏览器自动保存
        response.addCookie(cookie);*/


        TokenUtils.responseTokenByCookie(userDB,response,30);

        model.addAttribute("name", loginUser.getName());


        //登录成功之后 把用户信息存储到 Redis
        redisTemplate.opsForValue().set(userDB.getName(), JSON.toJSONString(userDB),30, TimeUnit.MINUTES);
        //登录成功之后 用户在什么时间登录了系统
        boolean b = ZzyUtils.sendSms("17611221735", userDB.getName() + DateUtil.now() + "登录了系统", 5);
        System.out.println("发送短信的结果 " + b);
        return "success";
    }
}
